//建造者模式主要用于“分步骤构建一个复杂的对象”，这在其中“分步骤”是一个稳定的算法，而复杂对象的各个部分则经常变化。

/*二、建造者模式的作用和注意事项

  模式作用：

    1.分步骤创建一个复杂的对象（先各自独立的细节）。

    2.解耦封装过程和具体创建的组件。

    3.无需关心组件如何组装。

  注意事项：

    1.一定要有一个稳定的算法进行支持（要先把合同签好）。

    2.加工工艺是暴露的（使用者可以反馈问题，中间需要介入一个包工头）。
*/
//1.产出的东西是房子house
//2.包工头contractor 调用工人进行开工 而且他要很清楚工人们具体的某一个大项
//3.工人worker 是盖房子的 工人可以建卧室make_bedroom、建客厅make_livingroom、建厨房make_kitchen
//4.包工头只是一个接口而已，他不干活，他只对外说我能盖房子

//房子house
function House(){
  this.bedroom = "";
  this.livingroom = "";
  this.kitchen = "";
}

//包工头
function Contracter(){
  this.makeHouse = function(worker){
    worker.make_bedroom();
    worker.make_livingroom();
    worker.make_kitchen();
  }
}

//工人Worker
function Worker(){
  this.make_bedroom = function(){
    alert('卧室我盖好了');
  }
  this.make_livingroom= function(){
     alert('客厅我盖好了');
  }
  this.make_kitchen = function(){
    alert('厨房我盖好了');
  }
  this.handover = function(){
    var _house = new House();
    _house.bedroom = 'ok';
    _house.livingroom = 'ok';
    _house.kitchen = 'ok';
    return _house;
  }
}

var worker = new Worker();
var Contracter = new Contracter();
Contracter.makeHouse(worker);//包工头声称他能盖房子，是一个接口，故要给他一个makeHouse(worker)
var myhouse = worker.handover();
console.log(myhouse);
